<?php

namespace App\Http\Middleware;

use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Auth\Factory as Auth;
use Closure;

class Authenticate
{
    /**
     * The authentication factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $guard
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request, Closure $next, $guard)
    {
        $this->authenticate($request, $guard);

        return $next($request);
    }

    /**
     * Determine if the user is logged in to any of the given guards.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  string  $guard
     * @return void
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    protected function authenticate($request, string $guard)
    {
        if (empty($guard)) {
            $guard = null;
        }

        
        if ($this->auth->guard($guard)->check()) {
            return $this->auth->shouldUse($guard);
        }
        

        throw new AuthenticationException(
            'Unauthenticated.', [$guard], $this->redirectTo($request, $guard)
        );
    }

    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  string  $guard
     * @return string
     */
    protected function redirectTo($request, $guard)
    {
        if (! $request->expectsJson()) {
            if($guard == 'admin'){
                return route('admin.login');
            }            
        }
    }
}
